package Test;

import java.util.ArrayList;
import java.util.List;

public class Test2 {
    public static void main(String[] args) {
        /*2. 数组操作题：数组去重与排序
            题目：给定一个整数数组，实现两个功能：
           （1）去除数组中的重复元素，保留首次出现的元素；
           （2）将去重后的数组按升序排序并输出。
            示例：输入：[3, 1, 2, 2, 3, 4, 1]     输出：[1, 2, 3, 4]   */
        int[] arr = {7, 2, 3, 3, 4, 5, 6,8,8};
        int[] unique = unique1(arr);
        for (int i = 0; i < unique.length; i++) {
            System.out.print(unique[i] + " ");
        }

        System.out.println();
        //冒泡排序
        for (int i = 0; i < unique.length-1; i++) {
            for (int j = 0; j < unique.length-1-i; j++) {
                if(unique[j]>unique[j+1]) {
                    int temp = unique[j];
                    unique[j] = unique[j + 1];
                    unique[j + 1] = temp;
                }
            }
        }
        printArr(unique);
    }

    //定义一个方法，用list实现对数组的去重
    public static int[] unique1(int[] arr){
        List<Integer> list=new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if(!contains1(list,arr[i])){
                list.add(arr[i]);//不存在
        }
        }
        //将list转换成数组
        //定义一个新的数组
        int[] newArr = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            newArr[i]=list.get(i);
        }
        return newArr;
    }

    //定义一个方法 去重
    public static int[] unique(int[] arr) {
        //重新创建一个新的数组
        int[] newArr = new int[arr.length];
        int index = 0;//再定义一个索引给newArr用
        for (int i = 0; i < arr.length; i++) {
            //判断每一个元素在不在新数组中
            if (!contains(newArr, arr[i])) {
                newArr[index++] = arr[i];     //说明不存在
            }                    //index也是从0开始，每循环一次index加1，i也加1
        }
        //创建一个新数组，用来存储去重后的数组
        int finalArr[]=new int[index];
        for (int i=0;i<index;i++){
            finalArr[i]=newArr[i];
        }
        return finalArr;


    }


    //定义一个方法，判断数组中的元素是否已存在
    public static boolean contains(int[] arr, int n) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == n) {
                return true;       //存在
            }
        }
        return false;
    }
    //定义一个方法判断集合中的数是否存在
    public static boolean contains1(List<Integer> list,int num){
        for (int i = 0; i < list.size(); i++) {
            if(num==list.get(i)){
                return true;//存在
            }
        }
        return false;
    }


    private static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }


}
